/**
 * <h3>CarouseController</h3>
 * <p>轮播图信息管理控制器类</p>
 *
 * <h3>功能描述</h3>
 * <p>提供轮播图信息的增删改查等基础操作接口，统一返回AjaxResult格式结果</p>
 * <p>支持轮播图的创建、删除、查询等核心功能，用于前端首页轮播展示</p>
 * <p>所有接口均基于RESTful风格设计，配合SpringMVC与Swagger注解实现标准化API输出</p>
 *
 * <h3>元数据</h3>
 * <ul>
 *    <li>作者：系统生成</li>
 *    <li>创建日期：2025年01月</li>
 * </ul>
 *
 * <h3>其他信息</h3>
 * <ul>
 *    <li>参考链接：<a href="https://fantastic-admin.hurui.me/guide/permission.html">权限控制文档</a></li>
 *    <li>示例代码：{@code new CarouseController()} </li>
 * </ul>
 *
 * @apiNote 接口需结合前端权限配置使用，确保安全性；提供公开和权限控制两种访问方式
 * @implSpec 继承自 {@link BaseController}，复用分页、返回封装等通用逻辑
 * @since 1.0.0
 */

package com.dnndo.web.controller.system;

import com.dnndo.common.annotation.Log;
import com.dnndo.common.core.controller.BaseController;
import com.dnndo.common.core.domain.AjaxResult;
import com.dnndo.common.core.domain.PageResult;
import com.dnndo.common.enums.BusinessType;
import com.dnndo.common.utils.bean.BeanDtoVoUtil;
import com.dnndo.system.domain.dto.CarouselDTO;
import com.dnndo.system.domain.vo.CarouseVO;
import com.dnndo.system.service.ICarouselService;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/system/carousel")
public class CarouseController extends BaseController {

    private final ICarouselService carouselService;

    @Autowired
    public CarouseController(ICarouselService carouselService) {
        this.carouselService = carouselService;
    }

    /**
     * 查询轮播图列表（权限控制）
     * @return AjaxResult 包含轮播图列表的响应结果
     * @see com.dnndo.system.domain.vo.CarouseVO
     */
    @PreAuthorize("@ss.hasPermi('system:carousel:list')")
    @GetMapping("/list")
    public PageResult<CarouseVO> list(CarouselDTO dto) {
        startPage();
        List<CarouselDTO> list = carouselService.selectCarouselList(dto);
        return PageResult.pageOk(BeanDtoVoUtil.listVo(list, CarouseVO.class), new PageInfo<>(list).getTotal());
    }

    /**
     * 新增轮播图
     * @param dto 前端传入的轮播图数据传输对象，包含新增字段
     * @return AjaxResult 操作结果返回对象，包含成功或失败状态
     * @see com.dnndo.system.domain.dto.CarouselDTO
     */
    @PreAuthorize("@ss.hasPermi('system:carousel:add')")
    @Log(title = "轮播图管理", businessType = BusinessType.INSERT)
    @PostMapping("/add")
    public AjaxResult add(@Validated @RequestBody CarouselDTO dto) {
        return toAjax(carouselService.insertCarousel(dto));
    }

    /**
     * 删除轮播图
     * @param carouselId 要删除的轮播图唯一标识符
     * @return AjaxResult 操作结果返回对象，包含成功或失败状态
     * @see com.dnndo.system.domain.dto.CarouselDTO
     */
    @PreAuthorize("@ss.hasPermi('system:carousel:remove')")
    @Log(title = "轮播图管理", businessType = BusinessType.DELETE)
    @GetMapping("/del")
    public AjaxResult remove(@ApiParam(value = "轮播图ID", required = true) Integer carouselId) {
        return toAjax(carouselService.deleteCarouselById(carouselId));
    }

    /**
     * 获取轮播图列表（公开接口）
     * @return AjaxResult 包含轮播图列表的响应结果
     * @see com.dnndo.system.domain.vo.CarouseVO
     */
    @GetMapping("/getlist")
    public AjaxResult list1(CarouselDTO dto) {
        List<CarouselDTO> list = carouselService.selectCarouselList(dto);
        return AjaxResult.success(list);
    }
}
